package websocket.piggy;

import javax.sound.sampled.AudioFileFormat;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;

public class PCMToWAVConverter {
    private static final AudioFormat AUDIO_FORMAT = new AudioFormat(16000, 16, 1, true, false); // 16kHz 单声道 16位 PCM
    private static final AudioFormat PCM_FORMAT = new AudioFormat(
            AudioFormat.Encoding.PCM_SIGNED,  // 使用 PCM 编码
            16000,                            // 采样率 8kHz
            16,                               // 16位深度
            1,                                // 单声道
            2,                                // 每样本的字节数（16位 = 2字节）  (sampleSizeInBits / 8) * channels
            16000,                            // 数据流的速率（等于采样率）
            false                             // 是否为大端字节序
    );

    public static void convertPCMToWAV(byte[] pcmData, String name) {
        try (ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(pcmData)) {
            AudioInputStream audioInputStream = new AudioInputStream(byteArrayInputStream, AUDIO_FORMAT, pcmData.length / AUDIO_FORMAT.getFrameSize());
            // 创建 WAV 文件输出流
            File file = new File("D:\\test\\" + name);
            AudioSystem.write(audioInputStream, AudioFileFormat.Type.WAVE, file);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
